using System;
using System.Collections.Generic;
using System.Text;
using System.ServiceModel;
using CompanyX.Insurance.La.DataContracts;
//using CompanyX.Insurance.La.FaultContracts;

namespace CompanyX.Insurance.La.ServiceContracts
{
    /// <summary>
    /// This is the interface definition for Life &amp; Annuity insurance reporting
    /// </summary>
    /// <remarks>ACORD v2.18.02 compliant (includes custom schema extensions for operation faults)</remarks>
    [XmlSerializerFormat]
    [ServiceContract(Name = "Reporting", Namespace = "urn:CompanyX.Insurance.La.ServiceContracts")]
    public interface IReporting
    {
        /// <summary>
        /// To change billing information on an in force or pending policy..
        /// </summary>
        /// <param name="request">TXLife Request Data</param>
        /// <returns>TXLife Response Data</returns>
        [OperationContract(Name = "ChangeBillingInformation")]
        //[FaultContract(typeof(ChangeBillingInformationFt))]
        [return: MessageParameter(Name = "TXLifeResponse")]
        TXLifeResponse ChangeBillingInformation([MessageParameter(Name = "TXLifeRequest")]TXLifeRequest request);

        /// <summary>
        /// Used to record various financial activities such as premium or loan payments. This transaction is described 
        /// as one type, although each FinActivityType has an associated TXLife Response TransTypeCode.
        /// </summary>
        /// <param name="request">TXLife Request Data</param>
        /// <returns>TXLife Response Data</returns>
        [OperationContract(Name = "AddFinancialActivity")]
        //[FaultContract(typeof(AddFinancialActivityFt))]
        [return: MessageParameter(Name = "TXLifeResponse")]
        TXLifeResponse AddFinancialActivity([MessageParameter(Name = "TXLifeRequest")]TXLifeRequest request);

        /// <summary>
        /// To request a commission statement.
        /// </summary>
        /// <param name="request">TXLife Request Data</param>
        /// <returns>TXLife Response Data</returns>
        [OperationContract(Name = "GetCommissionStatement")]
        //[FaultContract(typeof(GetCommissionStatementFt))]
        [return: MessageParameter(Name = "TXLifeResponse")]
        TXLifeResponse GetCommissionStatement([MessageParameter(Name = "TXLifeRequest")]TXLifeRequest request);

        /// <summary>
        /// Used to transmit commission information.
        /// </summary>
        /// <param name="request">TXLife Request Data</param>
        /// <returns>TXLife Response Data</returns>
        [OperationContract(Name = "SendCommissionStatement")]
        //[FaultContract(typeof(SendCommissionStatementFt))]
        [return: MessageParameter(Name = "TXLifeResponse")]
        TXLifeResponse SendCommissionStatement([MessageParameter(Name = "TXLifeRequest")]TXLifeRequest request);

        /// <summary>
        /// To request a billing statement.
        /// </summary>
        /// <param name="request">TXLife Request Data</param>
        /// <returns>TXLife Response Data</returns>
        [OperationContract(Name = "GetBillingStatement")]
        //[FaultContract(typeof(GetBillingStatementFt))]
        [return: MessageParameter(Name = "TXLifeResponse")]
        TXLifeResponse GetBillingStatement([MessageParameter(Name = "TXLifeRequest")]TXLifeRequest request);
    }
}
